{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## Wide & Deep Recommender Demo"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wide and Deep Learning Model, proposed by Google in 2016, is a DNN-Linear mixed model. Wide and deep learning has been used for Google App Store for their app recommendation.\n",
    "\n",
    "In this tutorial, we use Recommender API of Analytics Zoo to build a wide linear model and a deep neural network, which is called Wide&Deep model, and use optimizer of BigDL to train the neural network. Wide&Deep model combines the strength of memorization and generalization. It's useful for generic large-scale regression and classification problems with sparse input features (e.g., categorical features with a large number of possible feature values)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Intialization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* import necessary libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    }
   ],
   "source": [
    "from zoo.models.recommendation import *\n",
    "from zoo.models.recommendation.utils import *\n",
    "from zoo.common.nncontext import init_nncontext\n",
    "import os\n",
    "import sys\n",
    "import datetime as dt\n",
    "from bigdl.dataset.transformer import *\n",
    "from bigdl.dataset.base import *\n",
    "from bigdl.nn.criterion import *\n",
    "from bigdl.optim.optimizer import *\n",
    "from bigdl.util.common import *\n",
    "import matplotlib\n",
    "\n",
    "matplotlib.use('agg')\n",
    "import matplotlib.pyplot as plt\n",
    "%pylab inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Initilaize NN context, it will get a SparkContext with optimized configuration for BigDL performance."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "sc = init_nncontext(\"WideAndDeep Example\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Preparation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Download and read movielens 1M rating data, understand the dimension."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000209, 3)\n",
      "1 6040 1 3952 [1 2 3 4 5]\n"
     ]
    }
   ],
   "source": [
    "from bigdl.dataset import movielens\n",
    "movielens_data = movielens.get_id_ratings(\"/tmp/movielens/\")\n",
    "min_user_id = np.min(movielens_data[:,0])\n",
    "max_user_id = np.max(movielens_data[:,0])\n",
    "min_movie_id = np.min(movielens_data[:,1])\n",
    "max_movie_id = np.max(movielens_data[:,1])\n",
    "rating_labels= np.unique(movielens_data[:,2])\n",
    "\n",
    "print(movielens_data.shape)\n",
    "print(min_user_id, max_user_id, min_movie_id, max_movie_id, rating_labels)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Transform ratings into dataframe, read user and item data into dataframes."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "sqlContext = SQLContext(sc)\n",
    "from pyspark.sql.types import *\n",
    "from pyspark.sql import Row\n",
    "\n",
    "Rating = Row(\"userId\", \"itemId\", \"label\")\n",
    "User = Row(\"userId\", \"gender\", \"age\" ,\"occupation\")\n",
    "Item = Row(\"itemId\", \"title\" ,\"genres\")\n",
    "\n",
    "ratings = sc.parallelize(movielens_data) \\\n",
    "    .map(lambda line: map(int, line)) \\\n",
    "    .map(lambda r: Rating(*r))\n",
    "ratingDF = sqlContext.createDataFrame(ratings)\n",
    "\n",
    "users= sc.textFile(\"/tmp/movielens/ml-1m/users.dat\")\\\n",
    "    .map(lambda line: line.split(\"::\")[0:4])\\\n",
    "    .map(lambda line: (int(line[0]), line[1], int(line[2]), int(line[3])))\\\n",
    "    .map(lambda r: User(*r))\n",
    "userDF = sqlContext.createDataFrame(users)\n",
    "\n",
    "items = sc.textFile(\"/tmp/movielens/ml-1m/movies.dat\") \\\n",
    "    .map(lambda line: line.split(\"::\")[0:3]) \\\n",
    "    .map(lambda line: (int(line[0]), line[1], line[2].split('|')[0])) \\\n",
    "    .map(lambda r: Item(*r))\n",
    "itemDF = sqlContext.createDataFrame(items)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Join data together, and transform data. For example, gender is going be used as categorical feature, occupation and gender will be used as crossed features."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+------+------+-----+------+---+----------+--------------+------+----------+\n",
      "|itemId|userId|label|gender|age|occupation|         title|genres|age-gender|\n",
      "+------+------+-----+------+---+----------+--------------+------+----------+\n",
      "|    26|  3391|    4|     2| 18|         4|Othello (1995)|     5|        24|\n",
      "|    26|  1447|    5|     2| 18|         4|Othello (1995)|     5|        24|\n",
      "|    26|  5107|    4|     1| 45|         0|Othello (1995)|     5|         5|\n",
      "|    26|  2878|    4|     1| 50|        20|Othello (1995)|     5|        47|\n",
      "|    26|  1527|    2|     2| 18|        10|Othello (1995)|     5|        24|\n",
      "+------+------+-----+------+---+----------+--------------+------+----------+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from pyspark.sql.functions import col, udf\n",
    "\n",
    "gender_udf = udf(lambda gender: categorical_from_vocab_list(gender, [\"F\", \"M\"], start=1))\n",
    "bucket_cross_udf = udf(lambda feature1, feature2: hash_bucket(str(feature1) + \"_\" + str(feature2), bucket_size=100))\n",
    "genres_list = [\"Crime\", \"Romance\", \"Thriller\", \"Adventure\", \"Drama\", \"Children's\",\n",
    "      \"War\", \"Documentary\", \"Fantasy\", \"Mystery\", \"Musical\", \"Animation\", \"Film-Noir\", \"Horror\",\n",
    "      \"Western\", \"Comedy\", \"Action\", \"Sci-Fi\"]\n",
    "genres_udf = udf(lambda genres: categorical_from_vocab_list(genres, genres_list, start=1))\n",
    "     \n",
    "allDF = ratingDF.join(userDF, [\"userId\"]).join(itemDF, [\"itemId\"]) \\\n",
    "        .withColumn(\"gender\", gender_udf(col(\"gender\")).cast(\"int\")) \\\n",
    "        .withColumn(\"age-gender\", bucket_cross_udf(col(\"age\"), col(\"gender\")).cast(\"int\")) \\\n",
    "        .withColumn(\"genres\", genres_udf(col(\"genres\")).cast(\"int\"))\n",
    "allDF.show(5)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Speficy data feature information shared by the WideAndDeep model and its feature generation. Here, we use occupation gender for wide base part, age and gender crossed as wide cross part, genres and gender as indicators, userid and itemid for embedding.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "bucket_size = 100\n",
    "column_info = ColumnFeatureInfo(\n",
    "            wide_base_cols=[\"occupation\", \"gender\"],\n",
    "            wide_base_dims=[21, 3],\n",
    "            wide_cross_cols=[\"age-gender\"],\n",
    "            wide_cross_dims=[bucket_size],\n",
    "            indicator_cols=[\"genres\", \"gender\"],\n",
    "            indicator_dims=[19, 3],\n",
    "            embed_cols=[\"userId\", \"itemId\"],\n",
    "            embed_in_dims=[max_user_id, max_movie_id],\n",
    "            embed_out_dims=[64, 64],\n",
    "            continuous_cols=[\"age\"])\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Transform data to  RDD of Sample. We use optimizer of BigDL directly to train the model, it requires data to be provided in format of RDD(Sample). A Sample is a BigDL data structure which can be constructed using 2 numpy arrays, feature and label respectively. The API interface is Sample.from_ndarray(feature, label).  Wide&Deep model need two input tensors, one is SparseTensor for the Wide model, another is a DenseTensor for the Deep model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "rdds = allDF.rdd.map(lambda row: to_user_item_feature(row, column_info))\n",
    "trainPairFeatureRdds, valPairFeatureRdds = rdds.randomSplit([0.8, 0.2], seed= 1)\n",
    "valPairFeatureRdds.persist()\n",
    "train_data= trainPairFeatureRdds.map(lambda pair_feature: pair_feature.sample)\n",
    "test_data= valPairFeatureRdds.map(lambda pair_feature: pair_feature.sample)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Create the Wide&Deep model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* In Analytics Zoo, it is simple to build Wide&Deep model by calling WideAndDeep API. You need specify model type, and class number, as well as column information of features according to your data. You can also change other default parameters in the network, like hidden layers. The model could be fed into an Optimizer of BigDL or NNClassifier of analytics-zoo. Please refer to the document for more details. In this example, we demostrate how to use optimizer of BigDL."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createZooWideAndDeep\n"
     ]
    }
   ],
   "source": [
    "wide_n_deep = WideAndDeep(5, column_info, \"wide_n_deep\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create optimizer and train the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createClassNLLCriterion\n",
      "creating: createAdam\n",
      "creating: createMaxEpoch\n",
      "creating: createDistriOptimizer\n",
      "creating: createEveryEpoch\n",
      "creating: createTop1Accuracy\n",
      "creating: createClassNLLCriterion\n",
      "creating: createLoss\n",
      "creating: createTrainSummary\n",
      "creating: createValidationSummary\n",
      "saving logs to /tmp/bigdl_summaries/wide_n_deep-20180510-153601\n"
     ]
    }
   ],
   "source": [
    "# Create an Optimizer\n",
    "batch_size = 8000\n",
    "\n",
    "optimizer = Optimizer(\n",
    "    model=wide_n_deep,\n",
    "    training_rdd=train_data,\n",
    "    criterion=ClassNLLCriterion(),\n",
    "    optim_method=Adam(learningrate = 0.001, learningrate_decay=0.00005),\n",
    "    end_trigger=MaxEpoch(10),\n",
    "    batch_size=batch_size)\n",
    "\n",
    "# Set the validation logic\n",
    "optimizer.set_validation(\n",
    "    batch_size=batch_size,\n",
    "    val_rdd=test_data,\n",
    "    trigger=EveryEpoch(),\n",
    "    val_method=[Top1Accuracy(), Loss(ClassNLLCriterion())]\n",
    ")\n",
    "log_dir='/tmp/bigdl_summaries/'\n",
    "app_name='wide_n_deep-'+dt.datetime.now().strftime(\"%Y%m%d-%H%M%S\")\n",
    "train_summary = TrainSummary(log_dir=log_dir,\n",
    "                                     app_name=app_name)\n",
    "val_summary = ValidationSummary(log_dir=log_dir,\n",
    "                                        app_name=app_name)\n",
    "optimizer.set_train_summary(train_summary)\n",
    "optimizer.set_val_summary(val_summary)\n",
    "print(\"saving logs to %s\" % (log_dir + app_name))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train the network. Wait some time till it finished.. Voila! You've got a trained model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimization Done.\n",
      "CPU times: user 76.6 ms, sys: 23.9 ms, total: 101 ms\n",
      "Wall time: 2min 21s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Boot training process\n",
    "optimizer.optimize()\n",
    "print(\"Optimization Done.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prediction and recommendation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Zoo models make inferences based on the given data using model.predict(val_rdd) API. A result of RDD is returned. predict_class returns the predicted label."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[4, 4, 3, 3, 3]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = wide_n_deep.predict(test_data)\n",
    "results.take(5)\n",
    "\n",
    "results_class = wide_n_deep.predict_class(test_data)\n",
    "results_class.take(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* In the Analytics Zoo, Recommender has provied 3 unique APIs to predict user-item pairs and make recommendations for users or items given candidates.\n",
    "* Predict for user item pairs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UserItemPrediction [user_id: 3391, item_id: 26, prediction: 4, probability: 0.505555750808]\n",
      "UserItemPrediction [user_id: 5576, item_id: 26, prediction: 4, probability: 0.426795236704]\n",
      "UserItemPrediction [user_id: 963, item_id: 26, prediction: 3, probability: 0.450544390906]\n",
      "UserItemPrediction [user_id: 3808, item_id: 26, prediction: 3, probability: 0.441043459719]\n",
      "UserItemPrediction [user_id: 4508, item_id: 26, prediction: 3, probability: 0.445120355293]\n"
     ]
    }
   ],
   "source": [
    "userItemPairPrediction = wide_n_deep.predict_user_item_pair(valPairFeatureRdds)\n",
    "for result in userItemPairPrediction.take(5): print(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Recommend 3 items for each user given candidates in the feature RDDs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UserItemPrediction [user_id: 1200, item_id: 1249, prediction: 5, probability: 0.43618989922]\n",
      "UserItemPrediction [user_id: 1200, item_id: 2580, prediction: 4, probability: 0.382430271314]\n",
      "UserItemPrediction [user_id: 1200, item_id: 3753, prediction: 4, probability: 0.372660889873]\n",
      "UserItemPrediction [user_id: 2200, item_id: 3697, prediction: 3, probability: 0.452656332471]\n",
      "UserItemPrediction [user_id: 2200, item_id: 196, prediction: 3, probability: 0.431529754179]\n"
     ]
    }
   ],
   "source": [
    "userRecs = wide_n_deep.recommend_for_user(valPairFeatureRdds, 3)\n",
    "for result in userRecs.take(5): print(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* Recommend 3 users for each item given candidates in the feature RDDs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "UserItemPrediction [user_id: 1856, item_id: 1200, prediction: 5, probability: 0.877071348293]\n",
      "UserItemPrediction [user_id: 3853, item_id: 1200, prediction: 5, probability: 0.797336803939]\n",
      "UserItemPrediction [user_id: 953, item_id: 1200, prediction: 5, probability: 0.794792014027]\n",
      "UserItemPrediction [user_id: 1349, item_id: 2000, prediction: 5, probability: 0.790950447552]\n",
      "UserItemPrediction [user_id: 288, item_id: 2000, prediction: 5, probability: 0.771050306327]\n"
     ]
    }
   ],
   "source": [
    "itemRecs = wide_n_deep.recommend_for_item(valPairFeatureRdds, 3)\n",
    "for result in itemRecs.take(5): print(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Evaluate the trained model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "creating: createTop1Accuracy\n",
      "Top1 accuracy: 0.464258462191\n",
      "CPU times: user 25.2 ms, sys: 7.76 ms, total: 33 ms\n",
      "Wall time: 2.16 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "evaluate_result=wide_n_deep.evaluate(test_data, 2800, [Top1Accuracy()])\n",
    "print(\"Top1 accuracy: %s\" % evaluate_result[0].result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Draw the convergence curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x103d97a50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss = np.array(train_summary.read_scalar(\"Loss\"))\n",
    "top1 = np.array(val_summary.read_scalar(\"Top1Accuracy\"))\n",
    "\n",
    "plt.figure(figsize = (12,12))\n",
    "plt.subplot(2,1,1)\n",
    "plt.plot(loss[:,0],loss[:,1],label='loss')\n",
    "plt.xlim(0,loss.shape[0]+10)\n",
    "plt.grid(True)\n",
    "plt.title(\"loss\")\n",
    "plt.subplot(2,1,2)\n",
    "plt.plot(top1[:,0],top1[:,1],label='top1')\n",
    "plt.xlim(0,loss.shape[0]+10)\n",
    "plt.title(\"top1 accuracy\")\n",
    "plt.grid(True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "PythonRDD[77] at RDD at PythonRDD.scala:48"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "valPairFeatureRdds.unpersist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
